[C#] Problems with implementing generic IEnumerator and IComparable
        Posted  
        
            by r0h
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by r0h
        
        
        
        Published on 2010-05-15T11:18:32Z
        Indexed on 
            2010/05/15
            11:24 UTC
        
        
        Read the original article
        Hit count: 312
        
Hi all!
I'm working on an AVL Tree. The tree itself seems to be working but I need a iterator to walk through the values of the tree. Therefore I tried to implement the IEnumerator interace. Unfortunately I get a compile time error implementing IEnumerator and IComparable. First the code and below that the error.
class AvlTreePreOrderEnumerator<T> : IEnumerator<T> where T :IComparable<T>
{
    private AvlTreeNode<T> current = default(T);
    private AvlTreeNode<T> tree = null;
    private Queue<AvlTreeNode<T>> traverseQueue = null;
    public AvlTreePreOrderEnumerator(AvlTreeNode<T> tree)
    {
        this.tree = tree;
        //Build queue
        traverseQueue = new Queue<AvlTreeNode<T>>();
        visitNode(this.tree.Root);
    }
    private void visitNode(AvlTreeNode<T> node)
    {
        if (node == null)
            return;
        else
        {
            traverseQueue.Enqueue(node);
            visitNode(node.LeftChild);
            visitNode(node.RightChild);
        }
    }
    public T Current
    {
        get { return current.Value; }
    }
    object IEnumerator.Current
    {
        get { return Current; }
    }
    public void Dispose()
    {
        current = null;
        tree = null;
    }
    public void Reset()
    {
        current = null;
    }
    public bool MoveNext()
    {
        if (traverseQueue.Count > 0)
            current = traverseQueue.Dequeue();
        else
            current = null;
        return (current != null);
    }
}
The error given by VS2008: Error 1 The type 'T' cannot be used as type parameter 'T' in the generic type or method 'Opdr2_AvlTreeTest_Final.AvlTreeNode'. There is no boxing conversion or type parameter conversion from 'T' to 'System.IComparable'.
For now I've not included the tree and node logic. I anybody thinks is necessary to resolve this probleem, just say so!
Thx!
© Stack Overflow or respective owner